/**************************************************************************************************
* Title: SumBoundingVolumes.h
* Author: Gael Huber
* Description: Encapsulating header for bounding volumes and aggregate functions for intersection
*	tests.
**************************************************************************************************/
#ifndef __SUMBOUNDINGVOLUMES_H__
#define __SUMBOUNDINGVOLUMES_H__

#include "SumAxisAlignedBox.h"
#include "SumObjectAlignedBox.h"
#include "SumBoundingSphere.h"
#include "SumBoundingCylinder.h"

#include <limits>

extern "C++"
{
// AABB vs. AABB
bool AABBAABBCollision(const AxisAlignedBox& a, const AxisAlignedBox& b);

// AABB vs. OBB
bool AABBOBBCollision(const AxisAlignedBox& a, const ObjectAlignedBox& b);

// AABB vs. Bounding Sphere
bool AABBSphereCollision(const AxisAlignedBox& a, const BoundingSphere& b);

// AABB vs. Bounding Cylinder
bool AABBCylinderCollision(const AxisAlignedBox& a, const BoundingCylinder& b);

// OBB vs. OBB
bool OBBOBBCollision(const ObjectAlignedBox& a, const ObjectAlignedBox& b);

// OBB vs. Bounding Sphere
bool OBBSphereCollision(const ObjectAlignedBox& a, const BoundingSphere& b);

// OBB vs. Bounding Cylinder
bool OBBCylinderCollision(const ObjectAlignedBox& a, const BoundingCylinder& b);

// Bounding Sphere vs. Bounding Sphere
bool SphereSphereCollision(const BoundingSphere& a, const BoundingSphere& b);

// Bounding Sphere vs. Bounding Cylinder
bool SphereCylinderCollision(const BoundingSphere& a, const BoundingCylinder& b);

// Bounding Cylinder vs. Bounding Cylinder
bool CylinderCylinderCollision(const BoundingCylinder& a, const BoundingCylinder& b);
}

#endif